文中對於實質型別與參考型別的差異,借用了小山的YOUTUBE影片,他講得簡單易懂
數值型別(實質型別) Value Type:
直接在已宣告變數的記憶體上儲存一個值。
參考型別 Referance Type:
變數存放的是儲存資料所在的記憶體位置
(在記憶體HEAP堆積區中)。
記憶體HEAP堆積區存放的是不可預測的資料,就是在程式執行後,我才知道要使用多少記憶體。
本圖片參考(對不起,這張圖做得太好了,直接拿來用一下,謝謝C姐的製作)
邦友CynthiaChuang的文章圖片
資料溢位 overflow
當數值指定給某個變數時,若超出他所能儲存的容量,就會造成資料溢位,這時IDE就會提示錯誤。
例如sbyte只能存放 -128 ~ 127 ,如果放入128就會爆掉,就有點像小箱子裝不下太大的東西一樣。
浮點數
必須在數值後加上"f"或是"F"
,或使用強制轉型,否則會出現錯誤,因為C#會將浮點數數值預設成double型別
,因此要把double型別的數值指定給float型別的變數時,有可會發生overflo
,所以要使用型別轉換
。float a;
a = 2.3f
a = (float)2.3;
布林值
true 、 false
。bool fg = true;
字串
字串是一種參考型別的資料型態,宣告時要用兩個雙引號
包住
string str = "a"
string str1 = "Hello World!";
string str3 = "哈囉 您好";
逸出字元(Escape)
當我們的字串中要顯示一些已經被系統拿來用的符號時,就要使用逸出字元[ \ ]
,在要顯示的字元前加上 [ \ ],就會如實的顯示。
string str3 = "\"Mary\" 的脾氣很好!"; 這時候就會顯示"Marry" 的脾氣很好!
var
var又稱為隱含型別的變數,不用去明確指定變數型別,C#編譯器會去自動判斷要給予的型別
。
var i = 10; 判定i為整數型別
var k = 10.2; 判定k為浮點數型別
var skr = "你好!"; 判定skr為字串型別
使用var宣告有以下規範
1.必須指定初始值
2.不能指定函數的參數
3.可用來命名,但會失去宣告的功能
4.一個var一次只能宣告一個變數 (後面不能加[ , ]來宣告多個變數)
值域小
的型別轉換
成值域大
的型別會發生自動型別轉換
(把小箱子裝進大箱子裡的感覺)char、浮點數、decimal之間不存在隱含轉型
short a = 5;
int i, j = 123;
i = a; a會由short → int
s = j; j是int(值域大),s是short(值域小),會發生錯誤
變數運算過程中,因轉型而失去正確性,或編譯器無法成功隱含轉型,就要進行強制轉型
short s;
int j;
s = (short)j;
將j強制轉型成short型別
但強制轉行有時會一定會失去正確性
short s;
int j = 12345678;
s = (short)j;
雖然轉型可以成功,但s的值卻不會是12345678,因為放下不,這時就失去正確性
轉型時要注意,轉型後是否為相似型別的值
string str1 = "123";
string str2 = "Hello";
int i, j;
i = (int)str1; 能成功將123指定給int型態的i
j = (int)str2; 字串Hello無法被轉換成任何的數值,會發生錯誤
short s;
int j;
s = Conver.ToInt16(j);
將j強制轉型成short型別
short s;
int j;
s = j.ToInt16();
將j強制轉型成short型別
也可以使用ToChar、ToSingle、ToDouble、ToSbyte、ToInt32、ToInt64、ToUint32、ToUint16、ToString...等等